// /*
//  * @Author       : helishou
//  * @Date         : 2021-07-05 15:38:47
//  * @LastEditTime : 2021-07-05 15:38:53
//  * @LastEditors  : helishou
//  * @Description  : 
//  * @FilePath     : \test.js
//  * 你用你的指尖,阻止我说再见,在bug完全失去之前
//  */
// 发版效率提升计划
// 详细描述
// 随着 Shopee 业务的不断扩张，项目数量越来越多。为了做到有序发版，小李需要先统计出当前发版的成功率，再做针对性的优化。

// 首先，在不考虑依赖的情况下，项目有两个数据：总发版次数 total、发版失败的次数 fail。我们认为 (total-fail)/total*100% 就是这个项目“自身的成功率”。

// 其次，如果一个项目依赖了多个项目，那么这个项目的成功率应当是：该项目的自身成功率*所有依赖项都成功的概率。

// 整个系统发版的成功率就是：所有最下游（不依赖任何项目）的项目都成功的概率。

// 小李想选择一个项目做优化，把项目的自身成功率增加到 1。他想知道，这最多可以让系统的发版成功率增加到多少。返回的结果请使用 xxx% 的格式，四舍五入保留 6 位小数（注意 JavaScript 中的 toFixed 不是四舍五入，请自行使用 Math.round 来处理）。

// P.S. 我们认为整个系统有 N 个项目，编号分别是 0～N-1。

 

// 【数据规模】

// 对于 10% 的数据，项目的依赖关系是一条链。

// 对于 30% 的数据，项目不超过 10 个。

// 对于全部数据，项目不超过 50 个，其余数字均小于 10000。

// 其他
// 时间限制: 1000ms

// 内存限制: 256.0MB

// 输入输出示例
// 示例1
// 输入
// 复制
// [1,1,1,1,1],[10,10,10,10,10],[[],[0],[1],[2],[3]]
// 输出
// 复制
// "65.610000%"
// 说明
// 每个项目的发版成功率都是 90%，依赖关系是一条链，因此随意选一个项目将成功率优化成 100%，最终结果都是 1*0.9*0.9*0.9*0.9=0.6561，所以答案是 65.610000%。
// 示例2
// 输入
// 复制
// [1,1,1,1,1],[10,10,10,10,10],[[],[0],[0],[1,2],[3]]
// 输出
// 复制
// "65.610000%"
// 说明
// 跟样例 1 不同，1 和 2 依赖了最上游的项目 0，后面的 3 又依赖了 1 和 2，4 依赖了 3。
// 优化项目 0 是唯一的最优解，此时：
// - 1 和 2 的成功率都是 1*0.9=0.9
// - 3 的成功率依赖于 1 和 2，再乘上自身的成功率 0.9，即 0.9*0.9*0.9=0.729
// - 4 的成功率要再低一些，是 0.6561
// 优化其它项目都只能得到 0.5904，不是最优解。
// console.log(Math.round(1.0000001,6))
// function deploy(failed, total, dependencies) {
//     let l=dependencies.length
//     let point=new Array(l).fill(0)
//     for(let i =0;i<l;i++){
//         point[i]=(total[i]-failed[i])/total[i]
//     }
//     let next=new Array(l).fill(0)
//     for(let i =0;i<l;i++){
//         next[i]=[]
//     }
//     for(let i =0;i<l;i++){
//         for(let j=0;j<dependencies[i].length;j++){
//             next[dependencies[i][j]].push(i)
//         }
//     }
//     console.log(next)
//     // write code here
// }
function deploy(failed, total, dependencies) {
    let l=dependencies.length
    let point=new Array(l).fill(0)
    for(let i =0;i<l;i++){
        point[i]=(total[i]-failed[i])/total[i]
    }
    let next=new Array(l).fill(0)
    // for(let i =0;i<l;i++){
    //     next[i]=[]
    // }
    // for(let i =0;i<l;i++){
    //     for(let j=0;j<dependencies[i].length;j++){
    //         next[dependencies[i][j]].push(i)
    //     }
    // }
    let rd=new Array(l).fill(0)
    for(let i =0;i<l;i++){
        // if(dependencies[i].length===0){
        //     next[i]++
        // }
        let le=dependencies[i].length
        if(!le){
            rd[i]=1
        }else{
            rd[i]=le
        }
    }
    console.log(rd)
    for(let i =0;i<l;i++){
        for(let j=0;j<dependencies[i].length;j++){
            // console.log(i,j,dependencies[i][j])
            rd[i]+=rd[dependencies[i][j]]-1
        }
    }
    console.log(rd)
    let min=1
    let result=1
    for(let i =0;i<l;i++){
        // if(i!==l-1){
            result*=Math.pow(point[i],rd[i])
            if(Math.pow(point[i],rd[i])<min){
                min=Math.pow(point[i],rd[i])
            }
        // }else{
        //     result*=Math.pow(point[i],next[i]+1)
        //     if(Math.pow(point[i],next[i]+1)<min){
        //         min=Math.pow(point[i],next[i]+1)
        //     }
        // }
    }

    // for(let i =0;i<l;i++){
        
    // }
    // console.log(result)
    let zs=String(result/min*100).split('.')

    // return (Math.round(result/min*100000000))/1000000+'%'
    return zs[0]+'.'+Math.round(('0.'+zs[1])*1000000)+'%'
    // write code here
}
a=deploy([1,1,1,1,1],[10,10,10,10,10],[[],[0],[0],[1,2],[3]])
console.log(a)